﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication1.Daten;
using System.Text.RegularExpressions;

namespace MvcApplication1.Controllers
{
    /// <summary>
    /// Controller für die Verarbeitung von User-spezifischen Anfragen 
    /// </summary>
    public class UsersController : Controller
    {
        /// <summary>
        /// Fungiert als Startseite und zeigt etwas Text an
        /// </summary>
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult List()
        {
            // Liste der Benutzer abrufen
            var benutzer = Session["users"] as List<User>;

            // Standardwerte anlegen, wenn die Liste leer ist.
            if (benutzer == null)
            {
                // Liste anlegen
                benutzer = new List<User>();

                // Liste in der Session speichern
                Session["users"] = benutzer;

                // Werte hinzufügen
                benutzer.Add(new User() { Vorname = "Karsten", Nachname = "Samaschke", EMailAddress = "karsten@samaschke.de" });
                benutzer.Add(new User() { Vorname = "Tobias", Nachname = "Hauser", EMailAddress = "tobias@samaschke.de" });
                benutzer.Add(new User() { Vorname = "Jürgen", Nachname = "Kotz", EMailAddress = "juergen@samaschke.de" });
            }
            // Uhrzeit vermerken
            ViewData["Generiert"] = DateTime.Now.ToShortTimeString();

            //Liste der Benutzer als Rückgabe definieren
            return View(benutzer);
        }

        public ActionResult Add(string nachname, string vorname, string email)
        {
            var istAngelegt = false;

             //Wurden Werte übermittelt?
            if (!string.IsNullOrEmpty(nachname) && !string.IsNullOrEmpty(vorname) && !string.IsNullOrEmpty(email))
            {
                // Neuer Datensatz wird angelegt
                istAngelegt = true;

                // Liste der Benutzer abrufen
                var users = Session["users"] as List<User>;

                // Wenn die Liste nicht existierte, dann neu anlegen
                if (null == users)
                {
                    users = new List<User>();
                }

                // Werte einer neuen User-Instanz zuweisen
                var user = new User()
                {
                    EMailAddress = email,
                    Nachname = nachname,
                    Vorname = vorname
                };

                // Speichern
                users.Add(user);

                // In die Session packen
                Session["users"] = users;
            }
            ViewData["istAngelegt"] = istAngelegt;
            return View();
        }

        public ActionResult Add2(string nachname, string vorname, string email)
        {
            var istAngelegt = false;

            // wurden Werte übermittelt
            if (Request.HttpMethod.Equals("POST"))
            {
                // Validierung vornehmen
                // Nachname vorhanden?
                if (string.IsNullOrEmpty(nachname))
                {
                    ModelState.AddModelError("nachname", "Bitte geben Sie einen Nachname an!");
                }

                // Vorname vorhanden?
                if (string.IsNullOrEmpty(vorname))
                {
                    ModelState.AddModelError("vorname", "Bitte geben Sie einen Vornamen an!");
                }

                // Email vorhanden?
                if (string.IsNullOrEmpty(email))
                {
                    ModelState.AddModelError("email", "Bitte geben Sie eine E-Mail-Adresse an!");
                }
                else if (!Regex.IsMatch(email, @"\w+@\w.\w{2,6}"))
                {
                    ModelState.AddModelError("email", "Bitte geben Sie eine gültige E-Mail-Adresse an!");
                }

                // Datensatz nur speichern, wenn kein Fehler aufgetreten ist
                if (ModelState.IsValid)
                {
                    // Neuer Datensatz wird angelegt
                    istAngelegt = true;

                    // Liste der Benutzer abrufen
                    var users = Session["users"] as List<User>;

                    if (null == users)
                    {
                        users = new List<User>();
                    }

                    User user = new User() { EMailAddress = email, Nachname = nachname, Vorname = vorname };

                    users.Add(user);

                    Session["users"] = users;
                }
            }


            ViewData["istAngelegt"] = istAngelegt;
            return View();
        }

        public ActionResult AddObject(User benutzer)
        {
            var istAngelegt = false;

            // Wurden Werte übermittelt?
            if (null != benutzer && !string.IsNullOrEmpty(benutzer.Nachname)
                && !string.IsNullOrEmpty(benutzer.Vorname)
                && !string.IsNullOrEmpty(benutzer.EMailAddress))
            {
                // Neuer Datensatz wird angelegt
                istAngelegt = true;

                // Liste der Benutzer abrufen
                var users = Session["user"] as List<User>;

                // Wenn die Liste nicht existierte, dann neu anlegen
                if (null == users)
                {
                    users = new List<User>();
                }

                // Speichern
                users.Add(benutzer);

                // in die Session packen
                Session["user"] = users;
            }
            else
            {
                // Datensatz für Übergabe an Ansicht initialisieren
                benutzer = new User();
            }

            ViewData["istAngelegt"] = istAngelegt;

            return View(benutzer);
        }

        [HttpPost]
        public ActionResult DoAdd(User benutzer)
        {
            var istAngelegt = false;

            // Wurden Werte übermittelt?
            if (null != benutzer && !string.IsNullOrEmpty(benutzer.Nachname)
                && !string.IsNullOrEmpty(benutzer.Vorname)
                && !string.IsNullOrEmpty(benutzer.EMailAddress))
            {
                // Neuer Datensatz wird angelegt
                istAngelegt = true;

                // Liste der Benutzer abrufen
                var users = Session["user"] as List<User>;

                // Wenn die Liste nicht existierte, dann neu anlegen
                if (null == users)
                {
                    users = new List<User>();
                }

                // Speichern
                users.Add(benutzer);

                // in die Session packen
                Session["user"] = users;
            }
            else
            {
                // Datensatz für Übergabe an Ansicht initialisieren
                benutzer = new User();
            }

            ViewData["istAngelegt"] = istAngelegt;

            return View(benutzer);
        }
    }
}
